/////precompiled////////
#include "precompiled.h"
////////////////////////


#include "svl_TIni.h"
using namespace svl;

// TIniFile ///////////////////////////////////////////////////////////////////

//
TIniFile::TIniFile(char *FileName)
{
  this->FileName = FileName;
}

// TIniSection ////////////////////////////////////////////////////////////////

//
TIniSection::TIniSection(TIniFile &File_,TString Name) : IniFile(File_)
{
  this->Name = Name;
}

//
void TIniSection::SetValue(TString Key,TString Value)
{
  ::WritePrivateProfileString(Name,Key,Value,IniFile.FileName);
}

//
bool TIniSection::GetValue(TString Key,TString &Value)
{
  TString V; V.New(1000); Value.Clear();
  if (::GetPrivateProfileString(Name,Key,"",V,1000,IniFile.FileName)) {
    Value = V; 
    return true;
  }
  return false;
}

//
void TIniSection::SetValue(TString Key,int Value)
{
  SetValue(Key,TString(Value));
}

//
bool TIniSection::GetValue(TString Key,int &Value)
{
  TString S; if (GetValue(Key,S)) {
    Value = S.ConvertToInt(); 
    return true;
  }
  return false;
}

//
void TIniSection::SetValue(TString Key,bool Value)
{
  SetValue(Key,TString(Value));
}

//
bool TIniSection::GetValue(TString Key,bool &Value)
{
  TString S; if (GetValue(Key,S)) {
    Value = S.ConvertToInt() != 0; 
    return true;
  }
  return false;
}

//
void TIniSection::SetValue(TString Key,grf::TRect Value)
{
  SetValue(Key + ".Left"  ,Value.Left);
  SetValue(Key + ".Top"   ,Value.Top);
  SetValue(Key + ".Width" ,Value.Width);
  SetValue(Key + ".Height",Value.Height);
}

//
bool TIniSection::GetValue(TString Key,grf::TRect &Value)
{
  if (!GetValue(Key + ".Left"  ,Value.Left  )) { return false;}
  if (!GetValue(Key + ".Top"   ,Value.Top   )) { return false;}
  if (!GetValue(Key + ".Width" ,Value.Width )) { return false;}
  if (!GetValue(Key + ".Height",Value.Height)) { return false;}

  return true;
}

//
TString TIniSection::GetSetValue(TString Key,TString Value)
{
  TString V; if (GetValue(Key,V)) {
    Value = V;
  }
  else { 
    SetValue(Key,Value);
  }
  return Value;
}

//
int TIniSection::GetSetValue(TString Key,int Value)
{
  int V; if (GetValue(Key,V)) {
    Value = V;
  }
  else { 
    SetValue(Key,Value);
  }
  return Value;
}

//
bool TIniSection::GetSetValue(TString Key,bool Value)
{
  bool V; if (GetValue(Key,V)) {
    Value = V;
  }
  else { 
    SetValue(Key,Value);
  }
  return Value;
}

//
grf::TRect TIniSection::GetSetValue(TString Key,grf::TRect Value)
{
  grf::TRect V; if (GetValue(Key,V)) {
    Value = V;
  }
  else { 
    SetValue(Key,Value);
  }
  return Value;
}
